<?php
/*
	Clip.vn
	-------
	Class Nomalize String That Contains Latin Characters
	----------------------------------------------------
	Note    : Input string must be UTF-8 encoding
	Created : 2007-05-24
	Modified: 2007-05-24
	Example :

	$txt = "Tôi đang Test . , , & () Đây là một hàm thử nghiệm I am Nguyễn Anh Tuấn. BÁNH CHUỐI CỦ ĐẬU BAY Đ ĐĐ";

	echo NormLatin::Transform($txt)."<br/>";
	echo NormLatin::Transform2($txt)."<br/>";
*/
class NormLatin
{
	static $charMap = array(
		"From"=>array("à","ả","ã","á","ạ","ă","ằ","ẳ","ẵ","ắ","ặ","â","ầ","ẩ","ẫ","ấ","ậ","đ","è","ẻ","ẽ","é","ẹ","ê","ề","ể","ễ","ế","ệ","ì","ỉ","ĩ","í","ị","ò","ỏ","õ","ó","ọ","ô","ồ","ổ","ỗ","ố","ộ","ơ","ờ","ở","ỡ","ớ","ợ","ù","ủ","ũ","ú","ụ","ư","ừ","ử","ữ","ứ","ự","ỳ","ỷ","ỹ","ý","ỵ","À","Ả","Ã","Á","Ạ","Ă","Ằ","Ẳ","Ẵ","Ắ","Ặ","Â","Ầ","Ẩ","Ẫ","Ấ","Ậ","Đ","È","Ẻ","Ẽ","É","Ẹ","Ê","Ề","Ể","Ễ","Ế","Ệ","Ì","Ỉ","Ĩ","Í","Ị","Ò","Ỏ","Õ","Ó","Ọ","Ô","Ồ","Ổ","Ỗ","Ố","Ộ","Ơ","Ờ","Ở","Ỡ","Ớ","Ợ","Ù","Ủ","Ũ","Ú","Ụ","Ư","Ừ","Ử","Ữ","Ứ","Ự","Ỳ","Ỷ","Ỹ","Ý","Ỵ"),
		"To"  =>array("a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","d","e","e","e","e","e","e","e","e","e","e","e","i","i","i","i","i","o","o","o","o","o","o","o","o","o","o","o","o","o","o","o","o","o","u","u","u","u","u","u","u","u","u","u","u","y","y","y","y","y","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","D","E","E","E","E","E","E","E","E","E","E","E","I","I","I","I","I","O","O","O","O","O","O","O","O","O","O","O","O","O","O","O","O","O","U","U","U","U","U","U","U","U","U","U","U","Y","Y","Y","Y","Y")
	);
/*
	static $charMap2 = array(
		"From"=>array("à","ả","ã","á","ạ","ă","ằ","ẳ","ẵ","ắ","ặ","â","ầ","ẩ","ẫ","ấ","ậ","đ","è","ẻ","ẽ","é","ẹ","ê","ề","ể","ễ","ế","ệ","ì","ỉ","ĩ","í","ị","ò","ỏ","õ","ó","ọ","ô","ồ","ổ","ỗ","ố","ộ","ơ","ờ","ở","ỡ","ớ","ợ","ù","ủ","ũ","ú","ụ","ư","ừ","ử","ữ","ứ","ự","ỳ","ỷ","ỹ","ý","ỵ","À","Ả","Ã","Á","Ạ","Ă","Ằ","Ẳ","Ẵ","Ắ","Ặ","Â","Ầ","Ẩ","Ẫ","Ấ","Ậ","Đ","È","Ẻ","Ẽ","É","Ẹ","Ê","Ề","Ể","Ễ","Ế","Ệ","Ì","Ỉ","Ĩ","Í","Ị","Ò","Ỏ","Õ","Ó","Ọ","Ô","Ồ","Ổ","Ỗ","Ố","Ộ","Ơ","Ờ","Ở","Ỡ","Ớ","Ợ","Ù","Ủ","Ũ","Ú","Ụ","Ư","Ừ","Ử","Ữ","Ứ","Ự","Ỳ","Ỷ","Ỹ","Ý","Ỵ"),
		"To"  =>array("a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","d","e","e","e","e","e","e","e","e","e","e","e","i","i","i","i","i","o","o","o","o","o","o","o","o","o","o","o","o","o","o","o","o","o","u","u","u","u","u","u","u","u","u","u","u","y","y","y","y","y","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","A","D","E","E","E","E","E","E","E","E","E","E","E","I","I","I","I","I","O","O","O","O","O","O","O","O","O","O","O","O","O","O","O","O","O","U","U","U","U","U","U","U","U","U","U","U","Y","Y","Y","Y","Y")
	);
*/
	// normalize latin string
	public static function Transform($input)
	{
		$charMap = self::$charMap;
		$from    = $charMap["From"];
		$to      = $charMap["To"];
		$string  = $input;
		$length  = count($from);
		for ($i=0; $i<$length; $i++)
		{
			$pattern     = "/".$from[$i]."/";
			$replacement = $to[$i];
			$string = preg_replace($pattern, $replacement, $string);
		}
		return $string;
	}

	// normalize latin string 2 with replacement of blank space to _
	public static function Transform2($input)
	{
		$charMap = self::$charMap;
		$from    = $charMap["From"];
		$to      = $charMap["To"];
		$string  = $input;
		$length  = count($from);
		for ($i=0; $i<$length; $i++)
		{
			$pattern     = "/".$from[$i]."/";
			$replacement = $to[$i];
			$string = preg_replace($pattern, $replacement, $string);
		}
		$string = self::CleanUpSpecialChars($string);
		return $string;
	}

	public static function CleanUpSpecialChars($string)
	{
		$pattern     = "/[ \x21-\x2e\x3a-\x3f\x5b-\x60\x7b-\x7e\/]/";
		$replacement = "-";
		$string = preg_replace($pattern, $replacement, $string);

		$pattern     = "/-{2,}/";
		$replacement = "-";
		return preg_replace($pattern, $replacement, $string);
	}
}
?>